%ifndef _ASM_GENERIC_MMAN_COMMON_INC_
%define _ASM_GENERIC_MMAN_COMMON_INC_

    ; Author: Michael S. Tsirkin <mst at mellanox.co.il>, Mellanox Technologies Ltd.
    ; Based on: asm-xxx/mman.h
    ; converted for nasm by agguro <admin at agguro.be> 2015


    %define PROT_READ       0x1         ; page can be read 
    %define PROT_WRITE      0x2         ; page can be written 
    %define PROT_EXEC       0x4         ; page can be executed 
    %define PROT_SEM        0x8         ; page may be used for atomic ops 
    %define PROT_NONE       0x0         ; page can not be accessed 
    %define PROT_GROWSDOWN  0x01000000  ; mprotect flag: extend change to start of growsdown vma 
    %define PROT_GROWSUP    0x02000000  ; mprotect flag: extend change to end of growsup vma 

    %define MAP_SHARED      0x01        ; Share changes 
    %define MAP_PRIVATE     0x02        ; Changes are private 
    %define MAP_TYPE        0x0f        ; Mask for type of mapping 
    %define MAP_FIXED       0x10        ; Interpret addr exactly 
    %define MAP_ANONYMOUS   0x20        ; don't use a file 

    %ifdef CONFIG_MMAP_ALLOW_UNINITIALIZED
        %define MAP_UNINITIALIZED 0x4000000  ; For anonymous mmap, memory could be uninitialized 
    %else
        %define MAP_UNINITIALIZED 0x0        ; Don't support this flag 
    %endif

    %define MS_ASYNC       1  ; sync memory asynchronously 
    %define MS_INVALIDATE  2  ; invalidate the caches 
    %define MS_SYNC        4  ; synchronous memory sync 

    %define MADV_NORMAL      0  ; no further special treatment 
    %define MADV_RANDOM      1  ; expect random page references 
    %define MADV_SEQUENTIAL  2  ; expect sequential page references 
    %define MADV_WILLNEED    3  ; will need these pages 
    %define MADV_DONTNEED    4  ; don't need these pages 

    ; common parameters: try to keep these consistent across architectures 
    %define MADV_REMOVE         9  ; remove these pages & resources 
    %define MADV_DONTFORK      10  ; don't inherit across fork 
    %define MADV_DOFORK        11  ; do inherit across fork 
    %define MADV_HWPOISON     100  ; poison a page for testing 
    %define MADV_SOFT_OFFLINE 101  ; soft offline page for testing 

    %define MADV_MERGEABLE     12  ; KSM may merge identical pages 
    %define MADV_UNMERGEABLE   13  ; KSM may not merge identical pages 

    %define MADV_HUGEPAGE      14  ; Worth backing with hugepages 
    %define MADV_NOHUGEPAGE    15  ; Not worth backing with hugepages 

    %define MADV_DONTDUMP      16  ; Explicity exclude from the core dump, overrides the coredump filter bits 
    %define MADV_DODUMP        17  ; Clear the MADV_NODUMP flag 
 
    ; compatibility flags 
    %define MAP_FILE  0

    ; When MAP_HUGETLB is set bits [26:31] encode the log2 of the huge page size.
    ; This gives us 6 bits, which is enough until someone invents 128 bit address
    ; spaces.
    ;
    ; Assume these are all power of twos.
    ; When 0 use the default page size.
    
    %define MAP_HUGE_SHIFT  26
    %define MAP_HUGE_MASK   0x3f

%endif ; _ASM_GENERIC_MMAN_COMMON_INC_
